今天來繼續昨天的題目,如何來撰寫Python的Package,首先了解一下,Package的作用,一個主要的作用為,方便不同開發者之間開發程式,也能避免各個開發者之間因為使用相同的Module名稱造成名稱上的衝突。另一個主要的原因,也是可以可能提供一個更讓人容易理解的命名規則,借由Package的名稱,可以更清楚的了解各個Module的作用。
個人覺得Package這個東西有點小複雜,特別是在路徑上的設定,我覺得是需要花點時間去了解的,特別是在各個Module之間的引由和相對路徑,絕對路徑上的區別和使用。首先,第一個比較重要的規則是,我們必需要在各個Package的目錄下(這裏單指該目錄有Module時)設定一個__init__.py的檔案,這個檔案可以是空的,也可以用來做一些初始化的動作,或是決定我們需要設定那些Module是可以被使用和import的。
第一個先講一個python執行的參數,-m,使用python3 -m時,python會預先載入module來給你使用。
再來講一下Relative和Absolute的差別,這邊就請各位直接看一下參加資料的Example了,我簡單說一下差別,簡單的說一個是使用相對路徑一個是絕對路徑的寫法,寫法上Realtive比較特別,是需要使用.代表當層,..當表上一層,...代表上上一層的方式,每多一點多一層這樣,然後需要注意的是,Relative import只支援from package import moudle的寫法,而Asolute的寫法沒有限制,不過在使用上,總是要有個起點,個人覺得就是main module當起點下的絕對路徑,其它lib應該是載入的根目錄。
再講幾個需要注意的地方,第一個是Python會對Module進行Cached的動作,來加速程式的啟動和執行,會依據Python版本存在其系統的目錄下面。第二點是會有所謂的Circlar Import的情況,這時解決的方式就是不要單獨Import其中一個Class或是Function,而是直接Import整個Module來避免這個問題。
參考資料:
Python 的 Import 陷阱